/*
 * Copyright (C) 2012 POAS.VSTU
 */

package frame;

import model.GameModel;
import ui.UIGamePanel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


/** Класс главной игровой формы. */
public class GameFrame extends JFrame{

    /// Игровая панель
    private UIGamePanel mPanel;

    // TODO Убрать, когда будет UI
    private GameModel mModel;

    /**
     * Точка входа в программу.
     *@param args параметры командной строки. Могут использоваться
     * в дальнешйшем при отладке или тестированнии игры.
     */
    public static void main(String[] args) {
        //new GameFrame(args).setVisible(true);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new GameFrame();
            }
        });
    }

    /**
     * Конструктор игровой формы.
     * Создает окно и размещает на нем игровую панель.     *
     * @see UIGamePanel
     */
    public GameFrame() {
        // TODO Убрать, когда будет UI
        mModel = new GameModel();
        mPanel = new UIGamePanel();
        setTitle("Лжец");
        setSize(frameWidth(), frameHeight());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        addMenu();

        setLocationRelativeTo(null);
        setVisible(true);
        setResizable(false);

    }

    /** Ширина окна. */
    public final int frameWidth() {
        // TODO использовать ширину игровой панели, когда появится интерфейс
        return mPanel.getWidth() + 50;
    }

    /** Высота окна. */
    public final int frameHeight() {
        // TODO использовать высоту игровой панели, когда появится интерфейс
        return mPanel.getHeight() + 50;
    }

    /**
     * Добавить главное меню в окно.
     * Добавляет пункты меню "Начать новую игру" и "Выход".
     */
    private void addMenu() {
        // Добавить меню в окно
        JMenuBar menuBar = new JMenuBar();
        JMenu newMenu = new JMenu("Игра");

        JMenuItem newGameItem = new JMenuItem("Начать новую игру");
        newMenu.add(newGameItem);
        newGameItem.addActionListener(new GameStartListener());

        JMenuItem exitGameItem = new JMenuItem("Выход");
        newMenu.add(exitGameItem);
        exitGameItem.addActionListener(new GameExitListener());

        menuBar.add(newMenu);
        setJMenuBar(menuBar);
    }

    /** Слушатель события старта игры. */
    private class GameStartListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            // mPanel.getModel().reset();
            // TODO Убрать, когда будет UI
            mModel.reset();
        }
    }

    /** Слушатель события закрытия окна. */
    private class GameExitListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }
}
